Skip to content

数据类型与输入

基础数据类型

C++ 常用的基本数据类型主要有以下几种:

数据类型描述示例
整形 int所有的整数int num = 1;
实数型 double所有的小数double num = 1.5;
单字符 char单一字符char character = 'a';
字符串 string两个及以上字符string word = "Hello";
布尔 booltrue 或者 falsebool judge = true;
cpp
#include <iostream>
using namespace std;
int main() {
    int num1 = 1;
    double num2 = 1.5;
    char character = 'a';
    bool judge = true;
    string word = &quot;Hello&quot;;
    cout << num1 << endl;
    return 0;
}

标准输入输出

C++语言的标准输入与输出使用的是 cin 和 cout。

cin 是从键盘上读取用户输入的内容。

cout 是输出相应的内容,endl 是换行的意思。

试试以下程序,输入两个数字,然后输出它们的和。(记得现在 stdin 里输入两个数字,以空格隔开或者换行隔开

cpp
#include <iostream>
using namespace std;
int main() {
    int num1,num2;
    cin >> num1 >> num2;
    cout << num1 + num2 << endl;
    return 0;
}

数据类型很重要,如果声明的是string类型的变量,再输入两个数字,然后输出它们的和看看。(**记得现在stdin里输入两个数字**


```cpp
#include <iostream>
using namespace std;
int main() {
    string num1,num2;
    cin >> num1 >> num2;
    cout << num1 + num2 << endl;
    return 0;
}

区别

可以看到,int 类型的变量相加就是数学加法,比如 1+2,会得到 3。但是 string 类型的变量相加就是字符拼接,比如'1'+'2',会得到'12',而不是 3。所以声明合适的数据类型非常重要。


拓展内容

后续为拓展内容

占用内存与范围

类型范围
char1 个字节-128 到 127 或者 0 到 255
unsigned char1 个字节0 到 255
signed char1 个字节-128 到 127
int4 个字节-2147483648 到 2147483647
unsigned int4 个字节0 到 4294967295
signed int4 个字节-2147483648 到 2147483647
short int2 个字节-32768 到 32767
unsigned short int2 个字节0 到 65,535
signed short int2 个字节-32768 到 32767
long int8 个字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
signed long int8 个字节-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long int8 个字节0 到 18,446,744,073,709,551,615
float4 个字节精度型占 4 个字节(32 位)内存空间,+/- 3.4e +/- 38 (~7 个数字)
double8 个字节双精度型占 8 个字节(64 位)内存空间,+/- 1.7e +/- 308 (~15 个数字)
long double16 个字节长双精度型 16 个字节(128 位)内存空间,可提供 18-19 位有效数字。
wchar_t2 或 4 个字节1 个宽字符

类型转换

强制转换

强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型。您可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型,如下所示:

(type_name) expression

请看下面的实例,使用强制类型转换运算符把一个整数变量除以另一个整数变量,得到一个浮点数:

cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int sum = 17, count = 5;
    double mean;
    mean = (double) sum / count;
    printf(&quot;mean的值是: %f&quot;, mean );
    return 0;
}

隐式转换

常用的算术转换是隐式地把值强制转换为相同的类型。编译器首先执行整数提升,如果操作数类型不同,则它们会被转换为下列层次中出现的最高层次的类型: Usual Arithmetic Conversion

cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a = 1;
    double b = 1.2;
    cout<<a + b<<endl; //int类型会自动转换为double类型,算出来是2.2
    cout<<a + (int)b<<endl; //强制转换b为int类型后,才能得到2
}
cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
    char ch = 'a'; // a 的 ASCII 值是 97
    int sum;
    sum = 'a' + ch; // 字符相加会自动转换为整数
    if(ch < 98) // char 可以直接和整数比较
        printf(&quot;sum的值是: %d\\n&quot;, sum );
    printf(&quot;变量ch的字母往右移动3位: %c&quot;, ch + 3);
}

字符串转换

字符串与数字的相互转换

可以使用 to_string()函数,实现数字转字符串。

cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a = 1;
    float b = 1.2;
    string c = to_string(a) + to_string(b);
    cout<<c<<endl;
}

可以使用 stoi()函数,实现字符串转整数。stod()函数,实现字符串转浮点数。

cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
    string a = &quot;1&quot;;
    int b = stoi(a) + stoi(a);
    cout<<b<<endl;
    string c = &quot;1.2&quot;;
    double d = stod(c) + stod(c);
    cout<<d<<endl;
}

typedef 自定义数据类型

typedef 是 C 编程中使用的关键字,用于为 C 程序中已经存在的变量提供一些有意义的名称。它的行为类似于我们为命令定义别名。简而言之,我们可以说这个关键字用于重新定义一个已经存在的变量的名称。

cpp
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    ll num = 1E10;
    cout<<num<<endl;
}

auto 类型

有时候,可以使用 auto 关键字来自动声明类型。

cpp
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int nums[3] = {1,2,3};
    for(auto i : nums)
        cout<<i<<endl;
}